#coding:utf-8

'''
email: chenyan@feling.net

循环卷积

1. 内圈顺时针排列，外圈逆时针排列
2. 对应项相乘，累加。得到结果序列的一项
3. 外圈顺时针旋转一格，对应项相乘，累加。得到结果序列的第二项
4. 。。。
5. 转完一圈，结束

'''

def circuit_convolution(inner, outer):
    '''
    >>> a = list(range(1, 5))
    >>> b = list(range(1, 5))
    >>> circuit_convolution(a, b) 
    [20, 26, 28, 26]
    '''
    result = []
    n = len(inner)
    outer.reverse()
    for i in range(n):#外圈旋转i格
        result.append(0)
        for j in range(n):#对应项相乘，累加
            result[i] = result[i]+inner[j]*outer[j-i]
            #print inner[j],outer[j-i]
        #print ''
    return result
            

if __name__=='__main__':
    import doctest
    doctest.testmod()
